正则编程
方法 | 描述 |
---|---|
exec |
一个在字符串中执行查找匹配的RegExp方法,它返回一个数组(未匹配到则返回null)。 |
test |
一个在字符串中测试是否匹配的RegExp方法,它返回true或false。 |
match |
一个在字符串中执行查找匹配的String方法,它返回一个数组或者在未匹配到时返回null。 |
search |
一个在字符串中测试匹配的String方法,它返回匹配到的位置索引,或者在失败时返回-1。 |
replace |
一个在字符串中执行查找匹配的String方法,并且使用替换字符串替换掉匹配到的子字符串。 |
split |
一个使用正则表达式或者一个固定字符串分隔一个字符串,并将分隔后的子字符串存储到数组中的String方法。 |
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Regular_Expressions
1: 正则表达式的四种操作
匹配(查找\验证)
切分
- split
提取
替换
- 一般使用replace
2: 相关api的注意要点
search和match的参数问题
我们知道字符串实例的那4个方法参数都支持正则和字符串。
但search和match,会把字符串转换为正则的。
转成以下两种模式
string.search(/./) string.search("\.")
match格式(加G和不加G)
var string = "2017.06.27"; var regex1 = /\b(\d+)\b/; var regex2 = /\b(\d+)\b/g; console.log( string.match(regex1) ); console.log( string.match(regex2) ); // => ["2017", "2017", index: 0, input: "2017.06.27"] // => ["2017", "06", "27"]
exec和match的比较
有G的时候, exec能接着上一次匹配后继续匹配, 一般用作while循环
var string = "2017.06.27"; var reg = /\b\d+\b/g; var result while (result = reg.exec(string)) { console.log(result, reg.lastIndex); }
g对exec和test的影响
字符串的四个方法,都没问题. 正则的两个方法,都有问题,慎用!!!!
有g的时候, test慎用!!!
test会记录lastIndex
var regex = /a/g; console.log( regex.test("a"), regex.lastIndex ); console.log( regex.test("aba"), regex.lastIndex ); console.log( regex.test("ababc"), regex.lastIndex );
split相关注意
var str = 'html,java,css' console.log(str.split(/,/, 2))//可以有长度限制 console.log(str.split(/,/)) console.log(str.split(/(,)/))//有分组的时候,结果数组中是包含分隔符的 console.log(str.split(/(?:,)/)) //[ 'html', 'java' ] //[ 'html', 'java', 'css' ] //[ 'html', ',', 'java', ',', 'css' ] //[ 'html', 'java', 'css' ]
replace的强大
$1,$2,...,$99 匹配第1~99个分组里捕获的文本 $& 匹配到的子串 $` 匹配到的子串的左边文本 $' 匹配到的子串的右边文本 $$ 美元符号
把"2,3,5",变成"5=2+3"
"2,3,5".replace(/(\d+),(\d+),(\d+)/, "$3=$1+$2")
把"2,3,5",变成"222,333,555":
"2,3,5".replace(/(\d+),(\d+),(\d+)/, "$3=$1+$2")
把"2+3=5",变成"2+3=2+3=5=5":
"2+3=5".replace(/=/, "$&$`$&$'$&");
构造函数多用字面量
var string = "2017-06-27 2017.06.27 2017/06/27"; var reg = new RegExp("\\d{4}(\-|\_|\.)\\d{2}\\1\\d{2}","g"); console.log(string.match(reg));
私有属性
var regex = /\w/img;
console.log(regex.global)//true
console.log( regex.ignoreCase );//true
console.log( regex.multiline );//true
console.log(regex.source)//\w